{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Introduction\n",
    "\n",
    "This tutorial demonstrates how to perform a multi-objective neural architecture search (NAS) on a MobileNetV3 one-shot weight-sharing super-network [1] using the Intel® Neural Compressor Dynamic NAS (DyNAS) search approach. \n",
    "\n",
    "#### Background\n",
    "Neural architecture search, the study of automating the discovery of optimal deep neural network architectures for tasks in domains such as computer vision and natural language processing, has seen rapid growth in the machine learning research community. While there have been many recent advancements in NAS, there is still a significant focus on reducing the computational cost incurred when validating discovered architectures by making search more efficient. Evolutionary algorithms, specifically genetic algorithms, have a history of usage in NAS and continue to gain popularity as a highly efficient way to explore the architecture objective space. In this tutorial, we show how evolutionary algorithms [2] can be paired with lightly trained objective predictors in an iterative cycle to accelerate multi-objective architectural exploration. Specifically, we use a bi-level optimization approach [3] denoted as `dynas`. This technique is ~4x more sample efficient than typical one-shot predictor-based NAS approaches. \n",
    "\n",
    "#### Super-Networks\n",
    "\n",
    "The computational overhead of evaluating DNN architectures during the neural architecture search process can be very costly due to the training and validation cycles. To address the training overhead, novel weight-sharing approaches known as one-shot or super-networks have offered a way to mitigate the training overhead by reducing training times from thousands to a few GPU days. These approaches train a task-specific super-network architecture with a weight-sharing mechanism that allows the sub-networks to be treated as unique individual architectures. This enables sub-network model extraction and validation without a separate training cycle. This tutorial offers pre-trained Once-for-All (OFA) super-networks [1] for the image classification on ImageNet-ilsvrc2012 as well as Transformer Language Translation (based on [6]) for the language translation tasks.\n",
    "\n",
    "#### Methodology\n",
    "\n",
    "The flow of the DyNAS approach (`approach='dynas'`) is shown in the following figure. Currently, three pre-trained super-network options for the image classification task are provided. In the first phase of the search, a small population (`config.dynas.population`) of sub-networks are randomly sampled and evaluated (validation measurement) to provide the initial training set for the inner predictor loop. After the predictors are trained, a multi-objective evolutionary search (`search_algorithm`) is performed in the predictor objective space. After an extensive search is performed, the best performing sub-network configurations are selected to be the next iteration's validation population. The cycle continues until the search concludes when the user defined evaluation count (`config.dynas.num_evals`) is met. \n",
    "   \n",
    "<br>\n",
    "<div>\n",
    "<img src=\"DyNAS_flow.png\" width=\"750\"/>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prerequisites"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "!pip -q install neural_compressor dynast==1.1.0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Alternatievely, if you have a local copy of https://github.com/intel/neural-compressor, you can uncomment and run the code below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# import sys\n",
    "# sys.path.insert(0,'<path to neural compressor>')\n",
    "# !pip install -qr <path to neural compressor>/requirements.txt\n",
    "# !pip install -q dynast==1.1.0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Import Packages"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from neural_compressor.conf.config import NASConfig\n",
    "from neural_compressor.experimental.nas import NAS"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Configure NAS Algorithm\n",
    "\n",
    "The `NASConfig` class allows us to define the appropriate parameters for determining how the neural architecture search is performed. Currently, the following multi-objective evolutionary algorithms are supported by the `dynas` approach: \n",
    "* `'nsga2'`\n",
    "* `'age'`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "config = NASConfig(approach='dynas', search_algorithm='nsga2')"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define Architecture\n",
    "We currently support pre-trained super-networks:\n",
    "\n",
    "1. Once-for-All (OFA) super-networks [4] for the image classification task on ImageNet-ilsvrc2012. In the case where the super-network PyTorch model download fails, you can manually copy the pre-trained models from https://github.com/mit-han-lab/once-for-all and place them in the `.torch/ofa_nets` path.\n",
    "2. Hardware-Aware-Transformers (HAT) supernetwork [6] for language translation task on WMT14 En-De. To run this supernetwork you have to manually download preprocessed dataset from https://github.com/mit-han-lab/hardware-aware-transformers/blob/master/configs/wmt14.en-de/get_preprocessed.sh and pretrained model from https://www.dropbox.com/s/pkdddxvvpw9a4vq/HAT_wmt14ende_super_space0.pt?dl=0\n",
    "3. BERT Base supernetwork finetuned on the [Stanford Sentiment Treebank](https://huggingface.co/datasets/sst2) dataset. You can download the model from [here](https://github.com/IntelLabs/DyNAS-T/blob/bert/model/models/fine_tuned_bert_sst2.pt) and the script to prepare the SST-2 dataset is available [here](https://github.com/NVIDIA/DeepLearningExamples/blob/master/PyTorch/LanguageModeling/BERT/data/create_datasets_from_start.sh#L21).\n",
    "\n",
    "Super-network options (choose 1): \n",
    "- `ofa_resnet50` - based on the ResNet50 architecture [4]. Search space of ~$10^{15}$ architectures.\n",
    "- `ofa_mbv3_d234_e346_k357_w1.0` - based on the MobileNetV3 architecture [5], width multiplier 1.0. Search space of ~$10^{19}$ architectures.\n",
    "- `ofa_mbv3_d234_e346_k357_w1.2` - based on the MobileNetV3 architecture [5], width multiplier 1.2. Search space of ~$10^{19}$ architectures.  \n",
    "- `transformer_lt_wmt_en_de` - based on the Transformer architecture [7].\n",
    "- `bert_base_sst2` - based on the BERT Base architecture, fine-tuned on the [Stanford Sentiment Treebank](https://huggingface.co/datasets/sst2) dataset."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "config.dynas.supernet = 'ofa_mbv3_d234_e346_k357_w1.2'\n",
    "config.nas.search.seed = 42"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Select performance metrics\n",
    "\n",
    "Performance metric options are as follows. You can use from 1 to 3 performance objectives to guide the search.\n",
    "\n",
    "Description:\n",
    "* `'accuracy_top1' or 'bleu' or 'accuracy_sst2'` - ImageNet Top-1 Accuracy (%) (for OFA supetnetworks) and Bleu (for Transformer LT) and accuracy on the SST2 dataset.\n",
    "* `'macs'` - Multiply-and-accumulates as measured from FVCore. \n",
    "* `'latency'` - Latency (inference time) measurement (ms).\n",
    "* `'params'` - Number of parameters in the model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "config.dynas.metrics = ['accuracy_top1', 'macs']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Search parameters\n",
    "\n",
    "* `config.dynas.population` - Size of the population for evolutionary/genetic algorithm (50 recommended)\n",
    "* `config.dynas.num_evals` - Validation measurement count, a higher count comes with greater computational cost but a higher chance of finding optimal sub-networks\n",
    "* `config.dynas.results_csv_path` - Location of the search (validation measurement) results. This file is also used to provide training data to the metric predictors. \n",
    "* `config.dynas.batch_size` - Batch size used during latency measurements.\n",
    "* `config.dynas.dataset_path` - For OFA it's a path to the imagenet-ilsvrc2012 dataset. This can be obtained at: https://www.image-net.org/download.php; For Transformer LT it's a path to preprocessed WMT EnDe directory (`(...)/data/binary/wmt16_en_de`)\n",
    "* `config.dynas.supernet_ckpt_path` - Transformer LT only. Path to downloaded pretrained super-network (`HAT_wmt14ende_super_space0.pt` file)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "config.dynas.population = 50\n",
    "config.dynas.num_evals = 250\n",
    "config.dynas.results_csv_path = 'search_results.csv'\n",
    "config.dynas.batch_size = 64\n",
    "config.dynas.dataset_path = '/datasets/imagenet/' #example"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Perform Search\n",
    "\n",
    "After the DyNAS configuration parameters are set, the search process can be started. Depending on how many evaluations `config.dynas.num_evals` were defined, the search time can vary from hours to days. \n",
    "The search process will populate the `config.dynas.results_csv_path` file and will also return a list of the final iteration's best sub-network population recommondation. \n",
    "\n",
    "Note: example search results are provided for the plotting section if you wish to skip this step for now. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "agent = NAS(config)\n",
    "results = agent.search()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Plot Search Results in the Multi-Objective Space"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 504x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.cm import ScalarMappable\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(7,5))\n",
    "\n",
    "number_of_evals = 500\n",
    "df_dynas = pd.read_csv('results_mbnv3w1p2_macs.csv')[:number_of_evals]\n",
    "df_dynas.columns = ['config', 'date', 'lat', 'macs', 'top1']\n",
    "\n",
    "cm = plt.cm.get_cmap('viridis_r')\n",
    "count = [x for x in range(len(df_dynas))]\n",
    "\n",
    "ax.scatter(df_dynas['macs'].values, df_dynas['top1'].values, marker='^', alpha=0.8, c=count, \n",
    "           cmap=cm, label='Discovered DNN Model', s=10)\n",
    "ax.set_title(f'Intel® Neural Compressor\\nDynamic NAS (DyNAS)\\nSupernet:{config.dynas.supernet}')\n",
    "ax.set_xlabel('MACs', fontsize=13)\n",
    "ax.set_ylabel('Top-1 Accuracy (%)', fontsize=13)\n",
    "ax.legend(fancybox=True, fontsize=10, framealpha=1, borderpad=0.2, loc='lower right')\n",
    "ax.grid(True, alpha=0.3)\n",
    "#ax.set_ylim(72,77.5)\n",
    "\n",
    "# Eval Count bar\n",
    "norm = plt.Normalize(0, len(df_dynas))\n",
    "sm = ScalarMappable(norm=norm, cmap=cm)\n",
    "cbar = fig.colorbar(sm, ax=ax, shrink=0.85)\n",
    "cbar.ax.set_title(\"         Evaluation\\n  Count\", fontsize=8)\n",
    "\n",
    "fig.tight_layout(pad=2)\n",
    "plt.show();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# References"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[1] Cai, H., Gan, C., & Han, S. (2020). Once for All: Train One Network and Specialize it for Efficient Deployment. ArXiv, abs/1908.09791.   \n",
    "[2] K. Deb, A. Pratap, S. Agarwal and T. Meyarivan, \"A fast and elitist multiobjective genetic algorithm: NSGA-II,\" in IEEE Transactions on Evolutionary Computation, vol. 6, no. 2, pp. 182-197, April 2002, doi: 10.1109/4235.996017. \n",
    "[3] Cummings, D., Sarah, A., Sridhar, S.N., Szankin, M., Muñoz, J.P., & Sundaresan, S. (2022). A Hardware-Aware Framework for Accelerating Neural Architecture Search Across Modalities. ArXiv, abs/2205.10358.   \n",
    "[4] He, K., Zhang, X., Ren, S., & Sun, J. (2016). Deep Residual Learning for Image Recognition. 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 770-778.  \n",
    "[5] Howard, A.G., Sandler, M., Chu, G., Chen, L., Chen, B., Tan, M., Wang, W., Zhu, Y., Pang, R., Vasudevan, V., Le, Q.V., & Adam, H. (2019). Searching for MobileNetV3. 2019 IEEE/CVF International Conference on Computer Vision (ICCV), 1314-1324.    \n",
    "[6] Wang, H., Wu, Z., Liu, Z., Cai, H., Zhu, L., Gan, C. and Han, S., 2020. Hat: Hardware-aware transformers for efficient natural language processing. arXiv preprint arXiv:2005.14187.    \n",
    "[7] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A.N., Kaiser, Ł. and Polosukhin, I., 2017. Attention is all you need. Advances in neural information processing systems, 30."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "dynast_inc_pip_test",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.16"
  },
  "vscode": {
   "interpreter": {
    "hash": "034f8a08a724a63543abaa4596714d81bf71b36e8b4dd0d5bf824a9fea1bc071"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
